/* Copyright 2009 Requirements Management System 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.mags.remas.model.entity.provider;

// Generated Dec 6, 2009 5:47:57 PM by Hibernate Tools 3.2.2.GA
// powered by MAGS

import java.util.List; 
import org.apache.commons.validator.GenericValidator;
import org.mags.dao.common.ERestrictionOperator;
import org.mags.dao.common.ESortOrder;
import org.mags.dao.common.IRestrictionBuilder;
import org.mags.dao.provider.NoCacheableDataProvider;
import org.mags.remas.model.entity.EntityReference;

public class EntityReferenceProvider extends NoCacheableDataProvider<EntityReference> {
	private static final long serialVersionUID = 1L;
	private final ReferenceStatusProvider referenceStatusProvider;
	public static void makeFilter(EntityReference filter, IRestrictionBuilder restrictionBuilder) {
		if(filter!=null&&restrictionBuilder!=null) {
			if(!GenericValidator.isBlankOrNull(filter.getDescription()))
				restrictionBuilder.addConditionAnd("description", ERestrictionOperator.LK, "%"+filter.getDescription()+"%");
			if(filter.getReferenceStatus()!=null&&filter.getReferenceStatus().getReferenceStatusId()>0)
				restrictionBuilder.addConditionAnd("referenceStatus.referenceStatusId", ERestrictionOperator.EQ, filter.getReferenceStatus().getReferenceStatusId());
		}
	}
	public long countBySample(EntityReference filter) {
		IRestrictionBuilder restrictionBuilder = super.getRestrictionBuilder();
		makeFilter(filter, restrictionBuilder);
		return super.getSize(null, restrictionBuilder);
	}
	public List<EntityReference> findBySample(EntityReference filter, int firstRecord, int numRecords) {
		IRestrictionBuilder restrictionBuilder = super.getRestrictionBuilder();
		makeFilter(filter, restrictionBuilder);
		return super.getByRestriction(null, restrictionBuilder, null, firstRecord, numRecords);
	}
	public EntityReferenceProvider(ReferenceStatusProvider referenceStatusProvider) {
		this.referenceStatusProvider = referenceStatusProvider;
	}
	public List<EntityReference> getByReferenceId(long entityId) {
		IRestrictionBuilder restrictionBuilder = super.getRestrictionBuilder();
		restrictionBuilder.addConditionAnd("reference.entityId", ERestrictionOperator.EQ, entityId);
		return super.getByRestriction(new String[]{"entity"}, restrictionBuilder, new String[][]{{"entity.entityId", ESortOrder.asc.name()}}, 0, -1);
	}
	public List<EntityReference> getByEntitiesId(Object[] entities) {
		IRestrictionBuilder restrictionBuilder = super.getRestrictionBuilder();
		restrictionBuilder.addConditionAnd("entity.entityId", ERestrictionOperator.IN, entities);
		return super.getByRestriction(new String[]{"entity", "reference"}, restrictionBuilder, new String[][]{{"reference.entityId", ESortOrder.asc.name()}}, 0, -1);
	}	
	public List<EntityReference> getByEntityId(long entityId) {
		IRestrictionBuilder restrictionBuilder = super.getRestrictionBuilder();
		restrictionBuilder.addConditionAnd("entity.entityId", ERestrictionOperator.EQ, entityId);
		return super.getByRestriction(new String[]{"reference"}, restrictionBuilder, new String[][]{{"reference.entityId", ESortOrder.asc.name()}}, 0, -1);
	}
	@Override
	protected void loadProperties(EntityReference one) {
		one.setReferenceStatus(referenceStatusProvider.getById(one.getReferenceStatus().getReferenceStatusId()));
	}
}
